﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace SuperStar.Models
{
   
    public class BillDetailModels
    {
        public SuperStarEntities DB { get; set; }
        public String DEBUGTYPE { get; set; }

        public BillDetailModels()
        {
            DB = new SuperStarEntities();
        }
        public List<BillDetail> GetBillDetailOfBill(int billId)
        {
            var billDetail = from d in DB.BillDetails
                             where d.Bill_Id == billId
                             select d;
            return billDetail.ToList();
        } 
        public List<BillDetail> GetBillDetail(Guid memberId)
        {
            return null;
        }
        public bool Update(int billId, int promotionId, int quantity, out string message)
        {
            var status = DB.spUpdateBillDetail(billId, promotionId, quantity).SingleOrDefault();
            if (status.HasValue && status.Value == 1)
            {
                message = null;
                return true;
            }
            switch(status.GetValueOrDefault(0))
            {
                case -1: message = "Số lượng sản phẩm tặng đã hết!"; break;
                case -2: message = "Số lượng chọn vượt quá quy định cho phép!"; break;
                case -3: message = "Điểm thưởng không đủ để chọn tặng phẩm!"; break;
                default: message = "Có lỗi không xác định!"; break;
            }
            return false;
        }
        public BillDetail Insert(int billId, int promotionId, int quantity, out string message)
        {
            int? status;
            if(DEBUGTYPE.Equals("6_error"))
            {
                status = DB.spTH06_Bill_error_InsertBillDetail(billId, promotionId, quantity).SingleOrDefault();
            }
            else if (DEBUGTYPE.Equals("6_fix"))
            {
                status = DB.spTH06_Bill_fix_InsertBillDetail(billId, promotionId, quantity).SingleOrDefault();
            }
            else
            {
                status = DB.spInsertBillDetail(billId, promotionId, quantity).SingleOrDefault();
            }

            if (status > 0)
            {
                message = null;
                var r = from s in DB.BillDetails
                        where s.Id == status
                        select s;
                return r.SingleOrDefault();
            }
            switch (status)
            {
                case  0: message = "Bạn chưa chọn số lượng tặng phẩm để thêm!"; break;
                case -1: message = "Số lượng sản phẩm tặng đã hết!"; break;
                case -2: message = "Số lượng chọn vượt quá quy định cho phép!"; break;
                case -3: message = "Điểm thưởng không đủ để chọn tặng phẩm!"; break;
                default: message = "Có lỗi không xác định!"; break;
            }
            return null;
        }
        public bool Delete(int billId, int promotionId)
        {
            if(DEBUGTYPE.Equals("1_error"))
            {
                return DB.spTH01_Bill_error_DeleteBillDetail(billId, promotionId) > 0;
            }
            if (DEBUGTYPE.Equals("1_fix"))
            {
                return DB.spTH01_Bill_fix_DeleteBillDetail(billId, promotionId) > 0;
            }
            return DB.spDeleteBillDetail(billId, promotionId) > 0;
        }

    }
}
